/**
 * 账户控制器
 * 处理账户相关的HTTP请求
 */
const accountService = require('../services/accountService');
const ApiResponse = require('../utils/response');

class AccountController {
  /**
   * 用户登录
   * @param {Object} req - Express请求对象
   * @param {Object} res - Express响应对象
   * @param {Function} next - Express下一个中间件函数
   */
  async login(req, res, next) {
    try {
      const { phone, password } = req.body;
      
      // 验证请求参数
      if (!phone || !password) {
        return res.status(400).json(ApiResponse.paramError('手机号和密码不能为空'));
      }
      
      // 调用服务层进行登录
      const account = await accountService.login(phone, password);
      
      // 返回成功响应
      res.json(ApiResponse.success(account, '登录成功'));
    } catch (error) {
      // 处理特定错误
      if (error.message === '账号或密码错误') {
        return res.status(401).json(ApiResponse.error('401', error.message));
      }
      
      // 其他错误交给全局错误处理中间件
      next(error);
    }
  }

  /**
   * 获取账户信息
   * @param {Object} req - Express请求对象
   * @param {Object} res - Express响应对象
   * @param {Function} next - Express下一个中间件函数
   */
  async getAccountInfo(req, res, next) {
    try {
      const userId = req.user.id;
      
      // 调用服务层获取账户信息
      const account = await accountService.getAccountInfo(userId);
      
      // 返回成功响应
      res.json(ApiResponse.success(account));
    } catch (error) {
      // 错误交给全局错误处理中间件
      next(error);
    }
  }

  /**
   * 更新账户信息
   * @param {Object} req - Express请求对象
   * @param {Object} res - Express响应对象
   * @param {Function} next - Express下一个中间件函数
   */
  async updateAccount(req, res, next) {
    try {
      const userId = req.user.id;
      const { username, phone } = req.body;
      
      // 调用服务层更新账户信息
      const account = await accountService.updateAccount(userId, { username, phone });
      
      // 返回成功响应
      res.json(ApiResponse.success(account, '更新成功'));
    } catch (error) {
      // 错误交给全局错误处理中间件
      next(error);
    }
  }
}

module.exports = new AccountController();